#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QMouseEvent>
#include <QPaintEvent>
#include <QPainter>
#include <QPainterPath>
#include <QCursor>
#include <windows.h>
#include <QDebug>

QT_BEGIN_NAMESPACE
namespace Ui
{
    class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

protected:
    void mousePressEvent(QMouseEvent *event) override;          // 重写鼠标按下事件
    void mouseReleaseEvent(QMouseEvent *event) override;        // 重写鼠标释放事件
    void mouseMoveEvent(QMouseEvent *event) override;           // 重写鼠标移动事件
    void paintEvent(QPaintEvent *event) override;               // 重写绘画事件
    bool eventFilter(QObject *watched, QEvent *event) override; // 重写事件过滤器

private:
    Ui::Widget *ui;

    // 声明类内枚举 方向:无,上,下,左,右,左上,左下,右上,右下
    enum class direction : int
    {
        none,
        top,
        bottom,
        left,
        right,
        left_top,
        left_bottom,
        right_top,
        right_bottom,
        move_widget
    };
    const int borderWidth = 8;                     // 边界区域宽度
    const int borderRadius = 15;                   // 窗口圆角半径---最大30px
    QPointF m_clickPos;                            // 鼠标点击坐标
    QPointF m_leftTop;                             // 窗口左上角坐标
    QPointF m_leftBottom;                          // 窗口左下角坐标
    QPointF m_rightTop;                            // 窗口右上角坐标
    bool m_isTopWidget = false;                    // 是否置顶窗口
    bool m_isChangeWidget = false;                 // 是否改变窗口---大小 或者 位置
    direction m_resizeDirection = direction::none; // 默认界面调整方向
};
#endif // WIDGET_H
